package com.jyh.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.druid.stat.TableStat.Mode;
import com.alibaba.fastjson.JSONObject;
import com.jyh.config.BaseAction;
import com.jyh.config.datasource.TargetDataSource;
import com.jyh.db.dao.CustomDao;
/**
 * 逾期还款服务层
 * @author jiwei
 *
 */
@Service
public class collectionService  extends BaseAction{
	
	private static Logger logger = Logger.getLogger(collectionService.class);
	@Autowired
	private CustomDao customdao;
	/**
	 * 获取催收人催收逾期未还款的人的信息列表
	* @Title: getOverduelist 
	* @Description: TODO
	* @param @return    
	* @return List<Map<String,String>>    
	* @throws 
	* @author kiwishang 
	* @date 2017年10月18日 下午5:00:41
	 */
    public ModelAndView  getOverduelist(HttpServletRequest request,HttpSession session,String payback){
    	String orderNos="";
    	//查出所有已经回账的订单的orderno
    		List<Map<String, Object>> ordernolist=customdao.getPaybackorder();
    		if(ordernolist!=null && ordernolist.size()>0){
    			for(int i=0;i<ordernolist.size();i++){
    				orderNos+="'"+ordernolist.get(i).get("orderNo")+"',";
    		}
    			orderNos=orderNos.substring(0,orderNos.length()-1);
    			
    	    }
    		
    		ModelAndView mView=customdao.getOverduelist(request,session,orderNos,payback);
    		
    		
    		//添加催记在最前面的展示页
    		Map<String, Object> datamap=mView.getModel();
    		List<Map<String, Object>> datalist=(List)datamap.get("datalist");
    		
    		if(datalist!=null && datalist.size()>0){
    			for(int i=0;i<datalist.size();i++){
    				String csallinfostr="";
    				if(datalist.get(i).get("orderCode")!=null){
    				String orderno=datalist.get(i).get("orderCode").toString();
    				List<Map<String, Object>>  csallinfolist=customdao.getCSallinfo(orderno);
    				if(csallinfolist!=null && csallinfolist.size()>0){
    					for(int n=0;n<csallinfolist.size();n++){
    						csallinfostr+=csallinfolist.get(n).get("remakes")+"&#13;";
    					}
    				}
    				datalist.get(i).put("csinfo", csallinfostr);
				}
    			}
    		}
    		
    		//获取标签列表
			  List<Map<String, Object>> caselist=new ArrayList<Map<String,Object>>();
			  caselist=customdao.getcaselist("1");
    		mView.addObject("datalist", datalist);	
    		mView.addObject("caselist", caselist);	
    		return mView;
	}

    
    /**
     * 获取逾期的订单
    * @Title: getwhkList 
    * @Description: TODO
    * @param @param request
    * @param @return    
    * @return ModelAndView    
    * @throws 
    * @author kiwishang 
    * @date 2017年10月20日 下午5:10:10
     */
    public ModelAndView getwhkList(HttpServletRequest request){
    	ModelAndView mv=customdao.getwhkorderlist(request);
    	mv.addObject("userlist", getcustomuser());
    	return mv;
    }
    
    /**
     * 分配案件订单
    * @Title: setTaskbyhander 
    * @Description: TODO
    * @param @param userIds
    * @param @param checkcustomid
    * @param @param setcustomid
    * @param @return    
    * @return int    
    * @throws 
    * @author kiwishang 
    * @date 2017年10月20日 下午2:39:07
     */
    public  int setTaskbyhander(String fenpeiType,String ordernos,String setcustomid,String setcustomName){
    	//首先获取逾期未还的案件订单
    	int insertnum=0;
    	List<Map<String, Object>> datalist=new ArrayList<Map<String, Object>>();
    	datalist=customdao.setTaskbyhander(fenpeiType,ordernos);
    	datalist=customdao.getadduserNamelist(datalist);
    	//判断分配方式
    	if(fenpeiType.equals("2")){
    	 insertnum=customdao.savesetdata(datalist,setcustomid,setcustomName);
    	}else{
    		//获取所有的客服
    		List<Map<String, Object>> customlist=getcustomuser();
    		//首先计算将数据分成几份，拿数据的总数除以客服的总数
    		int datasize=datalist.size();
    		int customnum=customlist.size();
    		//计算组数
    		int pjnum=datasize/customnum;
    		int ysnum=datasize%customnum;
    		int startindex=0;
    		if(pjnum>0){
    		for(int m=0;m<customlist.size();m++){
    			List<Map<String, Object>> pjdatalist=datalist.subList(startindex, pjnum*(m+1));
    			insertnum=customdao.savesetdata(pjdatalist,customlist.get(m).get("id").toString(),customlist.get(m).get("userName").toString());
    			startindex=pjnum*(m+1);
    		}
    		}
    		if(ysnum>0){
    		//如果有余数 则将该数据随机分配给某个客服
    			Random random=new Random();// 定义随机类
    			int result=random.nextInt(getcustomuser().size());
    			List<Map<String, Object>> pjdatalist=datalist.subList(datalist.size()-ysnum, datalist.size());
    			insertnum=customdao.savesetdata(pjdatalist,customlist.get(result).get("id").toString(),customlist.get(result).get("userName").toString());       
    			
    		}
    		
    	}
    	//修改订单的是否分配催收人员
    	if(insertnum>0){
    		customdao.updateOrder(ordernos,fenpeiType);
    	}
        return insertnum;
    }
    /**
     * 获取客服人员名单
    * @Title: getcustomuser 
    * @Description: TODO
    * @param @return    
    * @return List<Map<String,Object>>    
    * @throws 
    * @author kiwishang 
    * @date 2017年10月23日 上午11:06:07
     */
   public List<Map<String, Object>>   getcustomuser(){
    	  return customdao.getcustomuser();
     }
   /**
    * 通过订单编号获取具体信息
   * @Title: getriskinfo 
   * @Description: TODO
   * @param @param orderno
   * @param @return    
   * @return List<Map<String,Object>>    
   * @throws 
   * @author kiwishang 
   * @date 2017年10月24日 下午6:50:43
    */
   public ModelAndView getriskinfo(HttpServletRequest request){
	  ModelAndView mView=new ModelAndView("riskManage/riskinfo");
	  //查询出第一联系人第二联系人
	  Map<String, Object> catamap=new HashMap<String,Object>();
	  String  usernumber=request.getParameter("userNumber");
	  catamap=customdao.getcataperson(usernumber);
	  //查询个人基本信息
	  Map<String, Object> userinfomap=new HashMap<String,Object>();
	  userinfomap=customdao.getuserinfo(request);
	  //查询订单信息
	  Map<String, Object> orderinfomap=new HashMap<String,Object>();
	  orderinfomap=customdao.getOrderInfo(request.getParameter("orderno"));
	  //获取标签列表
	  List<Map<String, Object>> caselist=new ArrayList<Map<String,Object>>();
	  caselist=customdao.getcaselist("1");
	  //获短信模板(需要将取到的value整理一下)
	  List<Map<String, Object>> messagelist=new ArrayList<Map<String,Object>>();
	  List<Map<String, Object>> messagemodelist=new ArrayList<Map<String,Object>>();
	  messagelist=customdao.getcaselist("3");
	  if(messagelist!=null && messagelist.size()>0){
		for(int i=0;i<messagelist.size();i++){
			String messagstr=messagelist.get(i).get("value").toString();
			String [] messagearr=messagstr.split("#");
			messagelist.get(i).put("value",messagearr[0]);
			String demomessage=messagearr[1];
			
			//Map<String, Object> modemessagemap=new HashMap<String,Object>();
			//modemessagemap.put("key", messagelist.get(i).get("key"));
			messagelist.get(i).put("demomessage", demomessage);
			//messagemodelist.add(modemessagemap);
		}  
	  }
	   //获取拨打电话结果
	  List<Map<String, Object>> phonelist=new ArrayList<Map<String,Object>>();
	  phonelist=customdao.getcaselist("2");
	  //获取高频联系人
	  List<Map<String, Object>> phonedatalist=new ArrayList<Map<String,Object>>();
	  phonedatalist=customdao.getphoneContent(usernumber);
	 
	  
	  //向mv中添加所查询出的信息
	  mView.addObject("catamap", catamap);
	  mView.addObject("userinfomap", userinfomap);
	  mView.addObject("orderinfomap", orderinfomap);
	  mView.addObject("caselist", caselist);
	  mView.addObject("messagelist", messagelist);
	  mView.addObject("messagemodelist", messagemodelist);
	  mView.addObject("phonelist", phonelist);
	  mView.addObject("phonedatalist", phonedatalist);
	  mView.addObject("orderno", request.getParameter("orderno"));
	  mView.addObject("usernumber", usernumber);
	  return mView;
   }
   /**
    * 设置标签
   * @Title: setcaseflag 
   * @Description: TODO
   * @param @param request
   * @param @return    
   * @return String    
   * @throws 
   * @author kiwishang 
   * @date 2017年10月26日 下午5:28:00
    */
   public String setcaseflag(HttpServletRequest request){
	   String orderno=request.getParameter("orderno");
	   String caseflag=request.getParameter("caseflag");
	   int updatenum=customdao.setcaseflag(orderno,caseflag);
	   JSONObject reposemap=new JSONObject();
		if (updatenum>0) {
		    reposemap.put("recode", "设置标签成功");
		} else {
			reposemap.put("recode", "设置标签失败");
		}
	   return reposemap.toJSONString();
   }
   /**
    * 保存催收记录
   * @Title: saveCSinfo 
   * @Description: TODO
   * @param @return    
   * @return String    
   * @throws 
   * @author kiwishang 
   * @date 2017年10月26日 下午6:03:15
    */
   public String saveCSinfo(HttpServletRequest request){
	  return customdao.saveCSinfo(request);
   }
   
   /**
    * 保存发送的信息
   * @Title: saveMessage 
   * @Description: TODO
   * @param @param smsStr
   * @param @param userTel
   * @param @return    
   * @return int    
   * @throws 
   * @author kiwishang 
   * @date 2017年10月27日 上午10:38:05
    */
   public List<Map<String, Object>> saveMessage(String smsStr,String userTel,String orderno,String sendtype){
	   return customdao.saveMessage(smsStr,userTel,orderno,sendtype);
   }
   
   /**
    * 保存申请留案
   * @Title: saveReplay 
   * @Description: TODO
   * @param @param request
   * @param @return    
   * @return String    
   * @throws 
   * @author kiwishang 
   * @date 2017年10月27日 上午11:09:52
    */
  public String saveReplay(HttpServletRequest request,String customName){
	  return customdao.saveReplay(request,customName);
  }
  
  /**
   * 刷新通讯录
  * @Title: getcontentuser 
  * @Description: TODO
  * @param @return    
  * @return String    
  * @throws 
  * @author kiwishang 
  * @date 2017年11月29日 下午5:33:26
   */
  public List<Map<String, Object>> getcontentuser(HttpServletRequest request){
	  List<Map<String, Object>> phonedatalist=new ArrayList<Map<String,Object>>();
	  phonedatalist=customdao.getphoneContent(request.getParameter("usernumber"));
	  String page = request.getParameter("currentPage");// 传过来的页数
	  int lineSize = 10; // 每页显示记录10条数
			int pageCount = 0; // 总页数
			int count = 0; // 数据总数
			int currentPage = 1; // 当前是第几页,默认是第一页
			if (page == null || "1".equals(page)) {
			} else {
				currentPage = Integer.parseInt(page); // 当前是第几页,默认是第一页
			}
			if (currentPage < 1) {
				currentPage = 1;
			}
			count=phonedatalist.size();
			int temp = count / lineSize; // 取商
			int tem2 = count % lineSize;// 取余数
			if (tem2 > 0 && tem2 < lineSize && temp > 0) {
				pageCount = count / lineSize + 1; // 总页数
			} else if (tem2 == 0 && temp > 0) {
				pageCount = temp;
			} else {
				pageCount = 1; // 总页数
			}
			if (currentPage >= pageCount) {
				currentPage = pageCount;
			}
	  return  phonedatalist.subList((currentPage - 1) * lineSize , lineSize);
  }
  /**
   * 获取回款统计
  * @Title: getTotalMoney 
  * @Description: TODO
  * @param @param request
  * @param @return    
  * @return String    
  * @throws 
  * @author kiwishang 
  * @date 2017年12月4日 下午4:18:15
   */
  public String getTotalMoney(HttpServletRequest request){
	  return customdao.getTotalMoney(request);
  }
  
  /**
   * 定时任务，每天凌晨修改分配的订单信息
  * @Title: updateLocalInfo 
  * @Description: TODO
  * @param     
  * @return void    
  * @throws 
  * @author kiwishang 
  * @date 2017年12月4日 下午5:26:25
   */
  public void updateLocalInfo(){
	  //首先获取本地已经分配的案件
	List<Map<String, Object>> ordernolist=customdao.getLocalinfo();
		if(ordernolist!=null && ordernolist.size()>0){
			for(int i=0;i<ordernolist.size();i++){
				Map<String, Object> map=customdao.getOrderInfo(ordernolist.get(i).get("orderCode").toString());
				String yqDays=map.get("yqday").toString();
				String dqpayAmount=map.get("payMoney").toString();
				String yqcostAmount=map.get("overdueSumMoney").toString();
				customdao.updateLocalMoney(ordernolist.get(i).get("orderCode").toString(),yqDays,yqcostAmount,dqpayAmount);
			}
			
		 }
		
		
		
	  
  }
  
}
